Thiết kế Biến_môi_trường

Trong tất cả các hệ thống Unix và giống Unix, mỗi tiến trình có một tập hợp các biến môi trường riêng biệt. Theo mặc định, khi một tiến trình được tạo, nó sẽ kế thừa một môi trường trùng lặp của tiến trình mẹ của nó, ngoại trừ những thay đổi rõ ràng do cha thực hiện khi tạo con. Ở cấp độ API, những thay đổi này phải được thực hiện giữa chạy fork và thi exec. Ngoài ra, từ các trình bao lệnh chẳng hạn như bash, người dùng có thể thay đổi các biến môi trường cho một lệnh gọi cụ thể bằng cách gián tiếp gọi nó qua env hoặc sử dụng ký hiệu ENVIRONMENT_VARIABLE=VALUE < command >. Một chương trình đang chạy có thể truy cập các giá trị của các biến môi trường cho mục đích cấu hình.

Các tập lệnh shell và các tập tin hàng loạt sử dụng các biến môi trường để truyền dữ liệu và tùy chọn cho các quy trình con. Chúng cũng có thể được sử dụng để lưu trữ các giá trị tạm thời để tham khảo sau này trong tập lệnh shell. Tuy nhiên, trong Unix, các biến không xuất được ưu tiên cho việc này vì chúng không bị rò rỉ ra bên ngoài quy trình.

Trong Unix, một biến môi trường được thay đổi trong tập lệnh hoặc chương trình đã biên dịch sẽ chỉ ảnh hưởng đến quá trình đó và có thể là các quá trình con. Quy trình mẹ và mọi quy trình không liên quan sẽ không bị ảnh hưởng. Tương tự, việc thay đổi hoặc loại bỏ giá trị của một biến bên trong tệp loạt DOS sẽ thay đổi biến trong thời gian của COMMAND. Sự tồn tại của COM.

Trong Unix, các biến môi trường thường được khởi tạo trong quá trình khởi động hệ thống bởi các tập lệnh hệ thống init và do đó được kế thừa bởi tất cả các quy trình khác trong hệ thống. Người dùng có thể và thường làm, tăng cường chúng trong tập lệnh hồ sơ cho trình bao lệnh mà họ đang sử dụng. Trong Microsoft Windows, giá trị mặc định của mỗi biến môi trường được lưu trữ trong sổ đăng ký Windows hoặc đặt trong AUTOEXEC. Tệp BAT.

Trên Unix, một chương trình setuid được cung cấp cho một môi trường do người gọi của nó chọn, nhưng nó chạy với quyền hạn khác với người gọi của nó. Trình liên kết động thường sẽ tải mã từ các vị trí được chỉ định bởi các biến môi trường $LD_LIBRARY_PATH$LD_PRELOAD và chạy nó với quyền hạn của quy trình. Nếu một chương trình setuid làm điều này, nó sẽ không an toàn, vì người gọi của nó có thể khiến nó chạy mã tùy ý và do đó sử dụng sai quyền hạn của nó. Vì lý do này, libc bỏ đặt các biến môi trường này khi khởi động trong một quy trình setuid. các chương trình setuid thường bỏ đặt các biến môi trường không xác định và kiểm tra các biến khác hoặc đặt chúng thành các giá trị hợp lý.